package com.designpattern.singleton;

/**
 * 懒加载单例模式
 */
public class LazySingLetonTest {

    public static void main(String[] args) {
//        LazySingleton lazySingLeton = LazySingleton.getLazySingLeton();
//        LazySingleton lazySingLeton2 = LazySingleton.getLazySingLeton();
//        System.out.println(lazySingLeton);
//        System.out.println(lazySingLeton2);
//        System.out.println(lazySingLeton2==lazySingLeton);
        new Thread(()->{
            LazySingleton lazySingLeton = LazySingleton.getLazySingLeton();
            System.out.println(lazySingLeton);
        }).start();
        new Thread(()->{
            LazySingleton lazySingLeton = LazySingleton.getLazySingLeton();
            System.out.println(lazySingLeton);
        }).start();
    }

}

class LazySingleton {
    private volatile static LazySingleton lazySingleton;

    private LazySingleton() {

    }

    public static LazySingleton getLazySingLeton() {
        if (lazySingleton == null) {
            synchronized (LazySingleton.class){
                if (lazySingleton==null){
                    lazySingleton= new LazySingleton();
                }
            }
        }
        return lazySingleton;
    }
}